package com.market.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaMode;
import com.market.biz.StatBiz;
import com.market.model.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * 统计数据控制器
 * 用于管理后台的统计数据展示，包括用户数据、订单数据、视频数据等各种统计
 * 所有接口需要管理员或系统管理员角色权限，且需要登录
 */
@RestController
@RequestMapping("/admin/stat")
@SaCheckRole(value = {"admin","system"}, mode = SaMode.OR)
@SaCheckLogin
public class StatController {
  @Autowired
  private StatBiz statBiz;
  
  /**
   * 获取平台总体统计数据
   * 包括用户总数、订单总数等数据
   * @return 返回统计数据映射
   */
  @GetMapping("/countData")
  public R<Map> getCountData(){
    Map map = statBiz.getCountData();
    return R.ok(map);
  }
  
  /**
   * 获取用户相关统计数据
   * 用于展示用户增长趋势、活跃度等
   * @return 返回用户统计数据列表
   */
  @GetMapping("/userData")
  public R<List<Map>> getUserData() {
    List<Map> list  = statBiz.getUserData();
    return R.ok(list);
  }
  
  /**
   * 获取表格展示的统计数据
   * 用于管理后台表格展示
   * @return 返回表格数据列表
   */
  @GetMapping("/tableData")
  public R<List<Map>> getTableData() {
    List<Map> list = statBiz.getTableData();
    return R.ok(list);
  }
  
  /**
   * 获取视频相关统计数据
   * 包括视频上传量、播放量等数据
   * @return 返回视频统计数据列表
   */
  @GetMapping("/videoData")
  public R<List<Map<String, Object>>> getVideoData() {
    List<Map<String, Object>> list = statBiz.getVideoData();
    return R.ok(list);
  }
  
  /**
   * 获取订单相关统计数据
   * 包括订单量、交易额等数据，按时间维度统计
   * @return 返回订单统计数据映射
   */
  @GetMapping("/orderData")
  public R<Map<String, List<Map<String, Long>>>> getOrderData() {
    Map<String, List<Map<String, Long>>> list = statBiz.getOrderData();
    return R.ok(list);
  }
}
